package multi_data.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.transaction.ChainedTransactionManager;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import javax.annotation.Resource;

/**
 * 事务配置(事务整合时配置，事务不整合时可以不配置)
 * 
 * @author 延晓磊
 *
 * @since 2017年9月5日
 */
@Configuration
@EnableTransactionManagement
public class TransactionConfig implements TransactionManagementConfigurer{

	@Resource
	private DataSourceTransactionManager aTransactionManager;
	@Resource
	private DataSourceTransactionManager bTransactionManager;
	
	/**
	 * 配置事务管理器 
	 * 
	 * 因为多数据源对应多个事务管理器，所以需要整合在一起，作为事务注解使用的唯一TransactionManager
	 * 
	 * @return
	 *
	 * @author 延晓磊
	 *
	 * @since 2017年9月5日
	 */
	@Override
	public PlatformTransactionManager annotationDrivenTransactionManager() {
		// 链接事务管理器（分布式事务：协调多个事务按顺序提交或回滚）
		return new ChainedTransactionManager(aTransactionManager,bTransactionManager);
	}
}
